使用 iptables 转发,同时正确保留源 IP

您所在的位置:网站首页 iptables 添加不连续的源ip 使用 iptables 转发,同时正确保留源 IP

使用 iptables 转发,同时正确保留源 IP

2024-07-12 10:36| 来源: 网络整理| 查看: 265

或者添加手动重定向(下面的冗长设置几乎可以自动完成)

每当容器重新启动时,它的(内部)IP 地址都存在更改的风险。所以必须计算这个。因此,对于mx使用命名网络命名的容器mx和涉及单个 IP 地址的容器,可以如下所述完成。

创建一个单独的预路由链(这样就可以刷新它而无需刷新其他任何东西)并首先调用它:

iptables -t nat -N mynat iptables -t nat -I PREROUTING -j mynat

可以通过编程方式检索容器的 IP 地址(对于mx使用单个地址命名的容器的简单情况):

containerip=$(docker container inspect --format '{{.NetworkSettings.IPAddress}}' mx)

(或者可以使用jq:)containerip=$(docker container inspect mx | jq '.[].NetworkSettings.IPAddress'

查找网桥接口名称更加复杂,或者至少我找不到仅使用docker ... inspect. 因此,在主机上找到它的 IP 地址并使用它查询主机ip address以仅找到设置了该特定 IP 地址的桥接接口(需要该jq命令。)

bridgeip=$(docker network inspect --format '{{(index .IPAM.Config 0).Gateway}}' mx) bridgeinterface=$(ip -json address show to "$bridgeip"/32 | jq -r '.[].ifname')

mynat每次(重新)启动容器时刷新并重新填充:

iptables -t nat -F mynat iptables -t nat -A mynat ! -i "$bridgeinterface" -p tcp --dport 25 -j DNAT --to-destination "$containerip":25

这将适用于当前情况:

iptables -t nat -I mynat !-i br-b147ffdbc9f3 -p tcp --dport 25 -j DNAT --to-destination 172.18.0.2:25

为了确保 Docker 自己的防火墙规则不会阻止此类流量,请FORWARD从DOCKER-USER链中的 filter/ 开始执行类似的操作。

最初(如果从引导开始,您可能还必须先创建DOCKER-USER):

iptables -N myforward iptables -I DOCKER-USER 1 -j myforward

然后以后每次(重新)启动容器时:

iptables -F myforward iptables -A myforward -p tcp ! -i "$bridgeinterface" -d "$containerip" -p tcp --dport 25 -j ACCEPT

这将适用于当前情况:

iptables -A myforward -p tcp ! -i br-b147ffdbc9f3 -d 172.18.0.2 -p tcp --dport 25 -j ACCEPT


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3